]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
unlockDialog: Set Switch User Button via _updateUserSwitchVisibility
authorChingkai <chuchingkai@gmail.com>
Sat, 25 Apr 2020 08:29:16 +0000 (16:29 +0800)
committerChingkai <chuchingkai@gmail.com>
Wed, 10 Jun 2020 15:02:55 +0000 (23:02 +0800)
This commit will set the button invisible when the user's can_switch
is false (e.g. when the session is remote) or user-switch-enabled is
disabled.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2687

js/ui/unlockDialog.js

index f74f4be23927190f0dd6be78fbe260112db0b376..cbcc2e512f34a1a14958589ada3edb0e5695a4be 100644 (file)
@@ -566,9 +566,17 @@ var UnlockDialog = GObject.registerClass({
         this._otherUserButton.set_pivot_point(0.5, 0.5);
         this._otherUserButton.connect('clicked', this._otherUserClicked.bind(this));
 
-        let screenSaverSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.screensaver' });
-        screenSaverSettings.bind('user-switch-enabled',
-            this._otherUserButton, 'visible', Gio.SettingsBindFlags.GET);
+        this._screenSaverSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.screensaver' });
+
+        this._userSwitchEnabledId = 0;
+        this._userSwitchEnabledId = this._screenSaverSettings.connect('changed::user-switch-enabled',
+            this._updateUserSwitchVisibility.bind(this));
+
+        this._userLoadedId = 0;
+        this._userLoadedId = this._user.connect('notify::is-loaded',
+            this._updateUserSwitchVisibility.bind(this));
+
+        this._updateUserSwitchVisibility();
 
         // Main Box
         let mainBox = new St.Widget();
@@ -828,6 +836,21 @@ var UnlockDialog = GObject.registerClass({
             this._gdmClient = null;
             delete this._gdmClient;
         }
+
+        if (this._userLoadedId) {
+            this._user.disconnect(this._userLoadedId);
+            this._userLoadedId = 0;
+        }
+
+        if (this._userSwitchEnabledId) {
+            this._screenSaverSettings.disconnect(this._userSwitchEnabledId);
+            this._userSwitchEnabledId = 0;
+        }
+    }
+
+    _updateUserSwitchVisibility() {
+        this._otherUserButton.visible = this._userManager.can_switch() &&
+            this._screenSaverSettings.get_boolean('user-switch-enabled');
     }
 
     cancel() {